package com.yiwenup.leetcode.top_interview_150;

/**
 * 文件描述
 *
 * @Project struct-algorithm
 * @Package com.yiwenup.leetcode.top_interview_150
 * @Author yiwenup
 * @Date 2024-12-10 09:38:26
 * @Description https://leetcode.cn/problems/container-with-most-water/description/?envType=study-plan-v2&envId=top-interview-150
 * <p>
 *     给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
 *     找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 *     返回容器可以储存的最大水量。
 *     说明：你不能倾斜容器。
 * </p>
 * <p>
 *     输入：[1,8,6,2,5,4,8,3,7]
 *     输出：49
 * </p>
 * <p>
 *     输入：height = [1,1]
 *     输出：1
 * </p>
 */
public class No0011 {
    public int maxArea(int[] height) {
        int left = 0, right = height.length - 1;
        int max = Integer.MIN_VALUE;

        while (left < right) {
            if (height[left] < height[right]) {
                max = Math.max(max, (right - left) * height[left++]);
            } else if (height[left] > height[right]) {
                max = Math.max(max, (right - left) * height[right--]);
            } else {
                max = Math.max(max, height[left] * (right - left));
                if (height[right - 1] < height[left + 1]) {
                    left++;
                } else {
                    right--;
                }
            }
        }

        return max;
    }
}
